﻿using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Marin.Entities;

namespace Marin.Repository
{
    public class EgresoRepository : MasterRepository, IEgresoRepository
    {
        public List<Egreso> GetAllFromEgresos()
        {
            var query = from p in Context.Egresos
                        
                select p;
            return query.ToList();
        }

        public List<Egreso> GetAllFromEgresosoByCriterioAndFechas(string criterio = "", DateTime? fechaIni = null, DateTime? fechaFin = null)
        {
            var query = from p in Context.Egresos
                        
                        select p;
            if (fechaIni.HasValue && fechaFin.HasValue)
            {
                //query = from p in query
                //        where (p.Fecha >= fechaIni.Value && p.Fecha <= fechaFin.Value)
                //        select p;
                query = query.Where(m => m.Fecha >= fechaIni.Value &&
                    m.Fecha <= fechaFin.Value);
            }

            if (!string.IsNullOrEmpty(criterio))
            {
                query = from p in query

                        select p;
            }
            return query.ToList();
        }

        public Egreso GetFromEgresoById(int id)
        {
            var query = from p in Context.Egresos
                        
                select p;
            if (id!=null)
            {
                query = from p in query
                        
                    where p.Id.Equals(id)
                    select p;
            }
            return query.SingleOrDefault();
        }

        public Egreso GetFromEgresoByCuota(Cuenta cuenta)
        {
            throw new NotImplementedException();
        }

        public void AddEgreso(Egreso egreso)
        {
            foreach (var item   in egreso.DetalleEgresoes)
            {
                Context.Entry(item.Cuenta).State = EntityState.Unchanged;
                Context.Entry(item).State= EntityState.Added;
            }
            Context.Entry(egreso).State= EntityState.Unchanged;
            Context.Egresos.Add(egreso);
            Context.SaveChanges();
        }

        public void UpdateEgreso(Egreso egreso)
        {

            Context.Entry(egreso).State = EntityState.Modified;
            foreach (var item in egreso.DetalleEgresoes)
            {
                item.Cuenta = null;

                Context.Entry(item).State =
                    item.Item ==
                    Int32.Parse("0")
                        ? EntityState.Added
                        : EntityState.Modified;
                item.IdCuenta = item.IdCuenta;
            }
            Context.SaveChanges();
        }

        public void RemoveEgreso(int id)
        {
            var existe = Context.Egresos.Find(id);

            if (existe!=null)
            {
                Context.Egresos.Remove(existe);
                Context.SaveChanges();
            }
        }
    }
}
